<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // async 函数是一种异步编程的解决方案 它是由promise封装来的 
        // async 函数的返回值是一个promise
        // await 能够获取promise执行的结果 await必须和async一起使用才行
        // 我们通常涉及的异步操作有 setInterval setTimeout ajax请求 各种事件等等
        // promise 是es6提出的一种异步编程的解决方案
        // promise 本质上是一个构造函数 它有三个状态 分别是 进行中（pending） 已成功（fullfilled） 已失败（rejected）
        // promise可以从进行中的状态转化为已成功的状态 也可以从进行中的状态 转化为以失败的状态
        // promise 不管是成功还是失败 都已经运行结束了 所以 promise不能从已成功的状态转为以失败的状态 
        // 也不能从已失败的状态转化为已成功的状态
        // promise构造函数接受一个函数作为参数 该函数内部接受两个参数 分别是resolve reject
        // resolve的作用是将promise从进行中的状态转化为已成功的状态
        // reject 的作用是将promise从进行中的状态转化为以失败的状态


        // async function fn() {

        // }

        // console.log(fn())
        // let num = 0
        // let promise = new Promise(function(resolve, reject) {
        //     setTimeout(() => { // 异步操作始终要比同步慢
        //         num = 1
        //         resolve(num)
        //     }, 0)
        // })

        // promise.then(res => {
        //     console.log(res);
        // })

        // axios.get().then(res => {

        // })

        function axios(params) {

        }


        axios.get = function(url) {
            return new Promise((resolve, rejct) => {
                // 原生jsajax请求的写法
                let xhr = new XMLHttpRequest()
                xhr.open('get', url, true)
                xhr.send()
                xhr.onreadystatechange = function() {
                    if (xhr.readyState === 4 && xhr.status === 200) {
                        let data = xhr.responseText
                            // console.log(JSON.parse(data));
                        resolve(JSON.parse(data))
                    }
                }
            })
        }

        // axios.get('https://cnodejs.org/api/v1/topics').then(res => {
        //     // console.log(res);
        //     console.log(res.data);
        // })
        async function getData() {
            let data = await axios.get('https://cnodejs.org/api/v1/topics')
            console.log(data);
        }

        getData()
    </script>
</body>

</html>